//
//  MyVC.m
//  FoldTableViewCellDemo
//
//  Created by lixiaoyi on 2018/7/13.
//  Copyright © 2018年 Anchoriter. All rights reserved.
//

#import "YZSystemMessageVC.h"
#import "YZSystemMessageCell.h"
#import "YZSystemMessageModel.h"
#import "ChatHeader.h"
#import "UITableView+FDTemplateLayoutCell.h"
#import "RefreshTableView.h"

static NSString *NewsCellIdentifier = @"YZSystemMessageCellIdentifier";

@interface YZSystemMessageVC ()<UITableViewDelegate,UITableViewDataSource,cellDelegate,CustomRefreshDelegate>
@property (nonatomic, strong) RefreshTableView *newsTableView;

@property (nonatomic, strong) NSMutableArray *newsDataArray;
@end

@implementation YZSystemMessageVC

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = @"系统通知";
    
    self.view.backgroundColor = [UIColor colorWithRed:243/255.0f green:243/255.0f blue:243/255.0f alpha:1.0];
    
    // 添加视图
    [self setSubViews];
    
    [self loadData];
    
#ifdef __IPHONE_11_0
    if (@available(iOS 11.0, *)) {
        self.newsTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    } else {
        // Fallback on earlier versions
    }
#endif
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    // 显示导航栏
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // 隐藏导航栏
    [self.navigationController setNavigationBarHidden:YES animated:NO];
}

-(void)setSubViews{
    CGRect tableFrame = CGRectMake(0, -30, kWidth, kHeight);
    self.newsTableView = [[RefreshTableView alloc] initWithDelegate:self andStyle:UITableViewStyleGrouped andTradeType:0];
    [self.newsTableView setFrame:tableFrame];
    self.newsTableView.delegate = self;
    self.newsTableView.dataSource = self;
    self.newsTableView.estimatedRowHeight = 0;
    self.newsTableView.estimatedSectionHeaderHeight = 0;
    self.newsTableView.estimatedSectionFooterHeight = 0;
    [self.newsTableView registerClass:[YZSystemMessageCell class] forCellReuseIdentifier:NewsCellIdentifier];
    self.newsTableView.refreshDeleage = self;
    [self.view addSubview:self.newsTableView];
}
-(void)loadData{
    
//    NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"newsData" ofType:@"json"]];
//    // YYModel字典转模型
//    self.newsDataArray = [NSArray yy_modelArrayWithClass:[YZSystemMessageModel class] json:jsonData];
}

//下拉刷新
- (void)pullDownDataWithType:(NSUInteger)type {
    [_newsDataArray removeAllObjects];
    [self fakeData];
}
//上拉更多
- (BOOL)pullUpDataWithType:(NSUInteger)type {
    // TODO
    YZSystemMessageModel *model1 = [YZSystemMessageModel new];
    model1.imageName = @"";
    model1.title = @"进度提醒";
    model1.desc = @"您的职业认证资格审核通过";
    model1.pubdate = @"1517368249";
    
    [_newsDataArray addObject:model1];
    return YES;
}

- (NSMutableArray *)newsDataArray {
    if (!_newsDataArray) {
        
    }
    
    return _newsDataArray;
}

- (void)fakeData{
    _newsDataArray =  [NSMutableArray array];
    YZSystemMessageModel *model1 = [YZSystemMessageModel new];
    model1.imageName = @"";
    model1.title = @"进度提醒";
    model1.desc = @"您的职业认证资格审核通过";
    model1.pubdate = @"1517368249";
    
    [_newsDataArray addObject:model1];
    
    
    YZSystemMessageModel *model2 = [YZSystemMessageModel new];
    model2.imageName = @"";
    model2.title = @"进度提醒";
    model2.desc = @"刚才是从人性角度上来讲的，如果从技术层面来看，由开发人员自己测试，会存在严重的“思维惯性”，通常开发人员在设计和开发过程中没有考虑到的分支和处理逻辑，在自己做测试的时候同样不会考虑到。比如对于一个函数，其中有一个 String 类型的输入参数，如果开发人员在做功能实现的时候压根没有考虑到 String 存在 Null 值得可能性，那么代码的实现里面也不会对 Null 值做处理，连带结果就是测试的时候就更不会设计 Null 值得测试数据，这样的“一条龙”缺失就会给代码的质量留下了缺陷隐患。更糟糕的是，对于这种情况，即便启用了代码覆盖率指标去衡量测试完整程度，也不能有效暴露这类问题，因为处理 Null 值得代码压根没有写，又何来代码覆盖率一说呐。";
    model2.pubdate = @"1517368249";
    [_newsDataArray addObject:model2];
    
    
    
    
    YZSystemMessageModel *model3 = [YZSystemMessageModel new];
    model3.imageName = @"";
    model3.title = @"进度提醒";
    model3.desc = @"有专职测试的时候，测试工作是专职测试人员完成的，专职测试人员通常会负责搭建被测试环境以及管理测试执行环境。被测试环境好理解，就是 System Under Test（SUT）。而测试执行环境是指用于执行测试用例的机器，比如对于 Web 的 GUI 测试，最简单的测试执行环境就是你本地机器上的浏览器。但是对于大型互联网企业，测试执行环境远远要比你想象的更复杂。通常都是一些大型的测试执行集群，甚至是内部的测试执行私有云，比如用 Selenium Grid 搭建的 GUI 测试执行环境，往往这样的集群都会有成百上千台机器，再比如用 Appium+Selenium Grid 搭建的移动设备测试集群，也往往会有上千台设备。现在没有了专职的测试人员，那就需要开发人员自己去管理、维护和搭建这些测试基础架构，这样做其实是得不偿失的，工作量本身并没有减少，只是换了一批人来做同样的事情，而且开发的精力往往更应该花在构建新的业务功能上，而不是用在维护测试基础设施。";
    model3.pubdate = @"1517368249";
    [_newsDataArray addObject:model3];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.newsDataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    YZSystemMessageCell *newsCell = [tableView dequeueReusableCellWithIdentifier:NewsCellIdentifier];
    if (!newsCell) {
        newsCell = [[YZSystemMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NewsCellIdentifier];
    }
    newsCell.selectionStyle = UITableViewCellSelectionStyleNone;
    newsCell.cellDelegate = self;
    
    YZSystemMessageModel *model = self.newsDataArray[indexPath.row];
    newsCell.myModel = model;
    
    return newsCell;
}
#pragma mark - 折叠按钮点击代理
/**
 *  折叠按钮点击代理
 *
 *  @param cell 按钮所属cell
 */
-(void)clickFoldBtn:(YZSystemMessageCell *)cell{
    
    NSIndexPath * indexPath = [self.newsTableView indexPathForCell:cell];
    YZSystemMessageModel *model = self.newsDataArray[indexPath.row];
    
    model.isOpening = !model.isOpening;
    [UIView animateWithDuration:0.2 animations:^{
        [self.newsTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }];
}
/**
 *  设置cell高度
 */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.newsDataArray.count > 0)
    {
        YZSystemMessageModel *model = [self.newsDataArray objectAtIndex:indexPath.row];
        // 动态计算cell高度
        // 这里使用了forkingdog的框架
        // https://github.com/forkingdog/UITableView-FDTemplateLayoutCell
        // UITableView+FDTemplateLayoutCell这个分类牛逼的地方就在于自动计算行高了
        // 如果我们在没有缓存的情况下，只要你使用了它其实高度的计算不需要我们来管，我们只需要[self.tableView reloadData]就完全足够了
        // 但是如果有缓存的时候，这个问题就来了，你会发现，点击展开布局会乱，有一部分会看不到，这是因为高度并没有变化，一直用的是缓存的高度，所以解决办法如下
        
        
        if (model.isOpening) {
            // 使用不缓存的方式
            return [self.newsTableView fd_heightForCellWithIdentifier:NewsCellIdentifier configuration:^(id cell) {
                
                [self handleCellHeightWithNewsCell:cell indexPath:indexPath];
            }];
        }else{
            // 使用缓存的方式
            return [self.newsTableView fd_heightForCellWithIdentifier:NewsCellIdentifier cacheByIndexPath:indexPath configuration:^(id cell) {
                
                [self handleCellHeightWithNewsCell:cell indexPath:indexPath];
            }];
        }
    } else{
        
        return 10;
    }
}

/**
 处理cell高度
 */
-(void)handleCellHeightWithNewsCell:(id)cell indexPath:(NSIndexPath *)indexPath{
    YZSystemMessageCell *newsCell = (YZSystemMessageCell *)cell;
    newsCell.myModel = self.newsDataArray[indexPath.row];
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
